#pragma once
#ifdef LIT_OGRE_SUPPORT
#ifndef __LIT__OGRE__DETAILS__INCLUDED__HH__
#define __LIT__OGRE__DETAILS__INCLUDED__HH__

#include "LitPrerequisites.h"

namespace Lit
{
	class LIT_API OgreDetails
	{
		friend class RootConfig;
		friend class Root;

		OgreCameraPtr mCamera;
		OgreRenderWindowPtr mWindow;
		OgreSceneManagerPtr mSceneMgr;
	public:
		OgreDetails( OgreRenderWindowPtr win = OgreRenderWindowPtr() );
		OgreDetails( OgreRenderWindowPtr win, OgreSceneManagerPtr mgr, OgreCameraPtr cam );
		OgreDetails( const OgreDetails& rk );
		~OgreDetails();
		
		void assign( OgreRenderWindowPtr win, OgreSceneManagerPtr scene, OgreCameraPtr cam )
		{
			mCamera = cam;
			mWindow = win;
			mSceneMgr = scene;
		}
		void assign( const OgreDetails& dets )
		{
			mCamera = dets.mCamera;
			mWindow = dets.mWindow;
			mSceneMgr = dets.mSceneMgr;
		}
		/*! Swaps the OGRE details in this class with another one.			
			\return This function returns _this_ class before being swapped */
		OgreDetails swap( const OgreDetails& dets )
		{
			OgreDetails thiss( *this );
			mCamera = dets.mCamera;
			mWindow = dets.mWindow;
			mSceneMgr = dets.mSceneMgr;
			return thiss;
		}
		OgreCameraPtr camera() const;
		OgreRenderWindowPtr window() const;
		OgreSceneManagerPtr sceneManager() const;
		
		void setCamera( OgreCameraPtr c );
		void setWindow( OgreRenderWindowPtr c );
		void setSceneManager( OgreSceneManagerPtr c );
	};
};

#endif
#endif